package com.example.myapplication.request

import com.example.myapplication.bean.ListResultBean
import com.example.myapplication.bean.UserBean
import com.example.myapplication.bean.article.ArticleBean
import com.example.myapplication.bean.article.BannerBean
import com.example.myapplication.bean.category.CategoryBean
import com.example.myapplication.bean.collect.OtherArticleResultBean
import com.example.myapplication.bean.collect.WebsiteCollectBean
import com.example.myapplication.bean.coins.CoinInfoBean
import com.example.myapplication.bean.coins.CoinRecordBean
import com.example.myapplication.bean.square.UserSharedBean
import com.example.myapplication.bean.tools.CommonWebsiteBean
import com.kun.base.net.ResponseResult
import retrofit2.http.*

/**
 *接口
 *
 * @author : Kun
 * @date : 2021/5/18 18:00
 */
interface IApi {

    /**
     * 注册
     */
    @Headers("Content-type:application/json;charset=UTF-8")
    @POST("user/register")
    suspend fun register(@QueryMap route: Map<String, String>): ResponseResult<UserBean>

    /**
     * 登录
     */
    @Headers("Content-type:application/json;charset=UTF-8")
    @POST("user/login")
    suspend fun login(@QueryMap route: Map<String, String>): ResponseResult<UserBean>

    /**
     * 退出登录
     */
    @GET("user/logout/json")
    suspend fun logout(): ResponseResult<String>

    /**
     * 获取文章列表
     */
    @GET("article/list/{index}/json")
    suspend fun getArticleList(@Path("index") index: Int): ResponseResult<ListResultBean<ArticleBean>>

    /**
     * 获取首页banner
     */
    @GET("banner/json")
    suspend fun getBannerList(): ResponseResult<List<BannerBean>>

    /**
     * 获取置顶文章
     */
    @GET("article/top/json")
    suspend fun getTopArticleList(): ResponseResult<List<ArticleBean>>

    /**
     * 收藏文章列表
     */
    @GET("lg/collect/list/{index}/json")
    suspend fun getCollectArticleList(@Path("index") index: Int): ResponseResult<ListResultBean<ArticleBean>>

    /**
     * 收藏网站列表
     */
    @GET("lg/collect/usertools/json")
    suspend fun getCollectWebsiteList(): ResponseResult<List<WebsiteCollectBean>>

    /**
     * 收藏站内文章
     */
    @POST("lg/collect/{id}/json")
    suspend fun collectArticle(@Path("id") id: Int): ResponseResult<Int>

    /**
     * 取消收藏站内文章
     * 文章列表用
     */
    @POST("lg/uncollect_originId/{id}/json")
    suspend fun unCollectArticle(@Path("id") id: Int): ResponseResult<Int>

    /**
     * 取消收藏文章
     *  我的收藏页面
     */
    @POST("lg/uncollect/{id}/json")
    suspend fun unCollectArticleForMe(
        @Path("id") id: Int,
        @QueryMap route: Map<String, Int>
    ): ResponseResult<Int>

    /**
     * 删除收藏网站
     *  我的收藏页面
     */
    @POST("lg/collect/deletetool/json")
    suspend fun deleteWebsite(@Query("id") id: Int): ResponseResult<Int>

    /**
     * 收藏站外文章
     */
    @POST("lg/collect/add/json")
    suspend fun addOtherArticle(@QueryMap route: Map<String, String>): ResponseResult<OtherArticleResultBean>

    /**
     * 收藏网站
     */
    @POST("lg/collect/addtool/json")
    suspend fun addWebsite(@QueryMap route: Map<String, String>): ResponseResult<WebsiteCollectBean>

    /**
     *  编辑收藏网站
     */
    @POST("lg/collect/updatetool/json")
    suspend fun editWebsite(@QueryMap route: Map<String, @JvmSuppressWildcards Any>): ResponseResult<WebsiteCollectBean>

    /**
     *  常用网站
     */
    @POST("friend/json")
    suspend fun getCommonWebsite(): ResponseResult<List<CommonWebsiteBean>>

    /**
     *  搜索热词
     */
    @POST("/hotkey/json")
    suspend fun getHotKey(): ResponseResult<List<WebsiteCollectBean>>

    /**
     * 搜索
     */
    @POST("article/query/{index}/json")
    suspend fun getSearchList(
        @Path("index") index: Int,
        @Query("k") k: String
    ): ResponseResult<ListResultBean<ArticleBean>>

    /**
     * 广场列表数据
     */
    @GET("user_article/list/{index}/json")
    suspend fun getSquareArticleList(@Path("index") index: Int): ResponseResult<ListResultBean<ArticleBean>>

    /**
     * 获取用户分享数据
     */
    @GET("user/{userId}/share_articles/{index}/json")
    suspend fun getUserShared(
        @Path("userId") userId: Int,
        @Path("index") index: Int
    ): ResponseResult<UserSharedBean>

    /**
     * 获取个人分享数据
     */
    @GET("user/lg/private_articles/{index}/json")
    suspend fun getMyShared(
        @Path("index") index: Int
    ): ResponseResult<UserSharedBean>

    /**
     * 删除分享文章
     *
     */
    @POST("lg/user_article/delete/{id}/json")
    suspend fun deleteShared(@Path("id") id: Int): ResponseResult<Int>

    /**
     * 分享文章
     *
     */
    @POST("lg/user_article/add/json")
    suspend fun sharedArticle(
        @Query("title") title: String,
        @Query("link") link: String
    ): ResponseResult<ArticleBean>

    /**
     * 问答
     */
    @GET("wenda/list/{index}/json")
    suspend fun getQuestion(@Path("index") index: Int): ResponseResult<ListResultBean<ArticleBean>>

    /**
     * 获取个人积分
     */
    @GET("lg/coin/userinfo/json")
    suspend fun getUserCoins(): ResponseResult<CoinInfoBean>

    /**
     * 获取排行榜
     */
    @GET("coin/rank/{index}/json")
    suspend fun getRankList(@Path("index") index: Int): ResponseResult<ListResultBean<CoinInfoBean>>

    /**
     * 获取个人积分流水
     */
    @GET("lg/coin/list/{index}/json")
    suspend fun getCoinRecordList(@Path("index") index: Int): ResponseResult<ListResultBean<CoinRecordBean>>

    /**
     * 获取项目分类
     */
    @GET("project/tree/json")
    suspend fun getProjectTreeList(): ResponseResult<MutableList<CategoryBean>>

    /**
     * 项目列表数据
     */
    @GET("project/list/{index}/json")
    suspend fun getProjectArticleList(
        @Path("index") index: Int,
        @Query("cid") cid: Int
    ): ResponseResult<ListResultBean<ArticleBean>>
}

